package com.泛型;

import java.util.ArrayList;
@SuppressWarnings("all")
public class Generics泛型版 {
    public static void main(String[] args) {
/**   引入泛型
 *    泛型的好处；
 *    1.编译时就能检查元素类型，提高了安全性；
 *    2.减少了类型转换次数，提高效率； 例如：
 *      不使用泛型  ArrayList()
 *          传入时  Dogs -> Object  取出时 Object -> Dogs (两次类型转换)
 *      使用泛型 ArrayList<Dogs>()
 *          传入时 Dogs -> Dogs  取出时 Dogs -> Dogs (不需要类型转换)
 * */
        ArrayList<Dogs> list = new ArrayList<Dogs>();
        //做限制，将ArrayList传入的对象限制为Dogs类型，其他类型会报错；
        list.add(new Dogs("hsp"));
        list.add(new Dogs("jeak"));
      //list.add(new Cats("tom")); 传入了Cats对象，报错；因为限制只能传入Dogs

        for (Dogs dog : list) {  // list取出的直接就是Dogs
            //因为ArrayList<Dogs> list 传入的和取出的都是Dogs类型，因此不用类型转换，节省时间；
            // Dogs d = (Dogs) o;
            System.out.println(dog.getName());
        }

    }
}



/**  传统方法*/
class Dogs{
    private String name;

    public Dogs(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "name='" + name ;
    }
}

class Cats{
    String name;

    public Cats(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "name='" + name ;
    }
}